library(tidyverse)
## -- Attaching packages --------------------------------------- tidyverse 1.3.0 --
## √ ggplot2 3.3.2 √ purrr 0.3.4
## √ tibble 3.0.4 √ dplyr 1.0.2
## √ tidyr 1.1.2 √ stringr 1.4.0
## √ readr 1.4.0 √ forcats 0.5.0
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
library(readr)
library(sf)
## Linking to GEOS 3.8.0, GDAL 3.0.4, PROJ 6.3.1
library(plotly)
##
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
##
## last_plot
## The following object is masked from 'package:stats':
##
## filter
## The following object is masked from 'package:graphics':
##
## layout
library(viridis)
## Loading required package: viridisLite
library(readxl)
library(ggpubr)
library(rmapshaper)
## Registered S3 method overwritten by 'geojsonlint':
## method from
## print.location dplyr
df_vote <- read.csv("countypres_2000-2016.csv")
geo_data <- read_sf("tl_2019_us_county.shp")
geo_data <- rmapshaper::ms_simplify(geo_data, keep = 0.01, keep_shapes = TRUE)
df_vote$FIPS <- as.character(df_vote$FIPS)
df_year <- function(year1, state1, df_vote){
vote_ <- df_vote %>%
filter(state == state1) %>%
filter(year == year1) %>%
filter(party == 'republican')
vote_['percentage'] <- vote_['candidatevotes']/vote_['totalvotes']
vote_$FIPS <- str_pad(vote_$FIPS, width = 5, side="left", pad="0")
vote_ <- vote_ %>% left_join(geo_data, by = c('FIPS' = 'GEOID'))
return(vote_)
}
vote_CA_2008 <- df_year(2008, 'California', df_vote)
vote_CA_2012 <- df_year(2012, 'California', df_vote)
vote_CA_2016 <- df_year(2016, 'California', df_vote)
vote_PA_2008 <- df_year(2008, 'Pennsylvania', df_vote)
vote_PA_2012 <- df_year(2012, 'Pennsylvania', df_vote)
vote_PA_2016 <- df_year(2016, 'Pennsylvania', df_vote)
vote_TX_2008 <- df_year(2008, 'Texas', df_vote)
vote_TX_2012 <- df_year(2012, 'Texas', df_vote)
vote_TX_2016 <- df_year(2016, 'Texas', df_vote)
unemployment <- read_excel('Unemployment.xls', range = cell_limits(c(8, 1)))
unemployment <- unemployment %>%
select(Unemployment_rate_2008,Unemployment_rate_2012,Unemployment_rate_2016, FIPStxt)
df_unemployment <- function(fips, unemployment){
df <- unemployment %>%
filter(substr(FIPStxt,1,2) == fips) %>%
left_join(geo_data, by = c('FIPStxt' = 'GEOID')) %>% tail(-1)
return(df)
}
CA_unemployment <- df_unemployment('06', unemployment)
PA_unemployment <- df_unemployment('42', unemployment)
TX_unemployment <- df_unemployment('48', unemployment)
fig_CA_2008 <- ggplotly(
ggplot(vote_CA_2008, aes(geometry=geometry)) +
geom_sf(aes(fill = percentage)) +
scale_fill_viridis_c(option = "plasma", trans = "sqrt") +
theme(panel.background = element_blank())) %>% layout(showlegend = FALSE)
fig_CA_2012 <- ggplotly(
ggplot(vote_CA_2012, aes(geometry=geometry)) +
geom_sf(aes(fill = percentage)) +
scale_fill_viridis_c(option = "plasma", trans = "sqrt") +
theme(panel.background = element_blank())) %>% layout(showlegend = FALSE)
fig_CA_2016 <- ggplotly(
ggplot(vote_CA_2016, aes(geometry=geometry)) +
geom_sf(aes(fill = percentage)) +
scale_fill_viridis_c(option = "plasma", trans = "sqrt") +
theme(panel.background = element_blank())) %>% layout(showlegend = FALSE)
fig_CA_unemployment_2008 <- ggplotly(
ggplot(CA_unemployment, aes(geometry=geometry)) +
geom_sf(aes(fill = Unemployment_rate_2008)) +
scale_fill_viridis_c(option = "viridis", trans = "sqrt") +
theme(panel.background = element_blank())) %>% layout(showlegend = FALSE)
fig_CA_unemployment_2012 <- ggplotly(
ggplot(CA_unemployment, aes(geometry=geometry)) +
geom_sf(aes(fill = Unemployment_rate_2012)) +
scale_fill_viridis_c(option = "viridis", trans = "sqrt") +
theme(panel.background = element_blank())) %>% layout(showlegend = FALSE)
fig_CA_unemployment_2016 <- ggplotly(
ggplot(CA_unemployment, aes(geometry=geometry)) +
geom_sf(aes(fill = Unemployment_rate_2008)) +
scale_fill_viridis_c(option = "viridis", trans = "sqrt") +
theme(panel.background = element_blank())) %>% layout(showlegend = FALSE)
fig <- subplot(fig_CA_2008, fig_CA_unemployment_2008,
fig_CA_2012, fig_CA_unemployment_2012,
fig_CA_2016, fig_CA_unemployment_2016, shareX = T, shareY = T, nrows = 3)
fig %>% layout(annotations = list(
list(x = 0.5, y = 1.05, text = 'California',showarrow = F, xref='paper', yref='paper'),
list(x = 0.1, y = 1.023, text = '2008 Vote Percentage ', showarrow = F, xref='paper', yref='paper'),
list(x = 0.9, y = 1.023, text = '2008 Unemployment Rate', showarrow = F, xref='paper', yref='paper'),
list(x = 0.1, y = 0.7, text = '2012 Vote Percentage ', showarrow = F, xref='paper', yref='paper'),
list(x = 0.9, y = 0.7, text = '2012 Unemployment Rate', showarrow = F, xref='paper', yref='paper'),
list(x = 0.1, y = 0.30, text = '2016 Vote Percentage ', showarrow = F, xref='paper', yref='paper'),
list(x = 0.9, y = 0.30, text = '2016 Unemployment Rate', showarrow = F, xref='paper', yref='paper')
),
showlegend = FALSE
)
fig
fig_PA_2008 <- ggplotly(
ggplot(vote_PA_2008, aes(geometry=geometry)) +
geom_sf(aes(fill = percentage)) +
scale_fill_viridis_c(option = "inferno", trans = "sqrt") +
theme(panel.background = element_blank())) %>% layout(showlegend = FALSE)
fig_PA_2012 <- ggplotly(
ggplot(vote_PA_2012, aes(geometry=geometry)) +
geom_sf(aes(fill = percentage)) +
scale_fill_viridis_c(option = "inferno", trans = "sqrt") +
theme(panel.background = element_blank())) %>% layout(showlegend = FALSE)
fig_PA_2016 <- ggplotly(
ggplot(vote_PA_2016, aes(geometry=geometry)) +
geom_sf(aes(fill = percentage)) +
scale_fill_viridis_c(option = "inferno", trans = "sqrt") +
theme(panel.background = element_blank())) %>% layout(showlegend = FALSE)
fig_PA_unemployment_2008 <- ggplotly(
ggplot(PA_unemployment, aes(geometry=geometry)) +
geom_sf(aes(fill = Unemployment_rate_2008)) +
scale_fill_viridis_c(option = "cividis", trans = "sqrt") +
theme(panel.background = element_blank())) %>% layout(showlegend = FALSE)
fig_PA_unemployment_2012 <- ggplotly(
ggplot(PA_unemployment, aes(geometry=geometry)) +
geom_sf(aes(fill = Unemployment_rate_2012)) +
scale_fill_viridis_c(option = "cividis", trans = "sqrt") +
theme(panel.background = element_blank())) %>% layout(showlegend = FALSE)
fig_PA_unemployment_2016 <- ggplotly(
ggplot(PA_unemployment, aes(geometry=geometry)) +
geom_sf(aes(fill = Unemployment_rate_2008)) +
scale_fill_viridis_c(option = "cividis", trans = "sqrt") +
theme(panel.background = element_blank())) %>% layout(showlegend = FALSE)
fig <- subplot(fig_PA_2008, fig_PA_unemployment_2008,
fig_PA_2012, fig_PA_unemployment_2012,
fig_PA_2016, fig_PA_unemployment_2016, shareX = T, shareY = T, nrows = 3)
fig %>% layout(annotations = list(
list(x = 0.5, y = 1.05, text = 'Pennsylvania',showarrow = F, xref='paper', yref='paper'),
list(x = 0.1, y = 1.023, text = '2008 Vote Percentage ', showarrow = F, xref='paper', yref='paper'),
list(x = 0.9, y = 1.023, text = '2008 Unemployment Rate', showarrow = F, xref='paper', yref='paper'),
list(x = 0.1, y = 0.7, text = '2012 Vote Percentage ', showarrow = F, xref='paper', yref='paper'),
list(x = 0.9, y = 0.7, text = '2012 Unemployment Rate', showarrow = F, xref='paper', yref='paper'),
list(x = 0.1, y = 0.30, text = '2016 Vote Percentage ', showarrow = F, xref='paper', yref='paper'),
list(x = 0.9, y = 0.30, text = '2016 Unemployment Rate', showarrow = F, xref='paper', yref='paper')
),
showlegend = FALSE
)
fig
fig_TX_2008 <- ggplotly(
ggplot(vote_TX_2008, aes(geometry=geometry)) +
geom_sf(aes(fill = percentage)) +
scale_fill_viridis_c(option = "inferno") +
theme(panel.background = element_blank())) %>% layout(showlegend = FALSE)
fig_TX_2012 <- ggplotly(
ggplot(vote_TX_2012, aes(geometry=geometry)) +
geom_sf(aes(fill = percentage)) +
scale_fill_viridis_c(option = "inferno") +
theme(panel.background = element_blank())) %>% layout(showlegend = FALSE)
fig_TX_2016 <- ggplotly(
ggplot(vote_TX_2016, aes(geometry=geometry)) +
geom_sf(aes(fill = percentage)) +
scale_fill_viridis_c(option = "inferno") +
theme(panel.background = element_blank())) %>% layout(showlegend = FALSE)
fig_TX_unemployment_2008 <- ggplotly(
ggplot(TX_unemployment, aes(geometry=geometry)) +
geom_sf(aes(fill = Unemployment_rate_2008)) +
scale_fill_viridis_c(option = "magma", trans = "sqrt") +
theme(panel.background = element_blank())) %>% layout(showlegend = FALSE)
fig_TX_unemployment_2012 <- ggplotly(
ggplot(TX_unemployment, aes(geometry=geometry)) +
geom_sf(aes(fill = Unemployment_rate_2012)) +
scale_fill_viridis_c(option = "magma", trans = "sqrt") +
theme(panel.background = element_blank())) %>% layout(showlegend = FALSE)
fig_TX_unemployment_2016 <- ggplotly(
ggplot(TX_unemployment, aes(geometry=geometry)) +
geom_sf(aes(fill = Unemployment_rate_2008)) +
scale_fill_viridis_c(option = "magma", trans = "sqrt") +
theme(panel.background = element_blank())) %>% layout(showlegend = FALSE)
fig <- subplot(fig_TX_2008, fig_TX_unemployment_2008,
fig_TX_2012, fig_TX_unemployment_2012,
fig_TX_2016, fig_TX_unemployment_2016, shareX = T, shareY = T, nrows = 3)
fig %>% layout(annotations = list(
list(x = 0.5, y = 1.05, text = 'Texas',showarrow = F, xref='paper', yref='paper'),
list(x = 0.1, y = 1.023, text = '2008 Vote Percentage ', showarrow = F, xref='paper', yref='paper'),
list(x = 0.9, y = 1.023, text = '2008 Unemployment Rate', showarrow = F, xref='paper', yref='paper'),
list(x = 0.1, y = 0.7, text = '2012 Vote Percentage ', showarrow = F, xref='paper', yref='paper'),
list(x = 0.9, y = 0.7, text = '2012 Unemployment Rate', showarrow = F, xref='paper', yref='paper'),
list(x = 0.1, y = 0.30, text = '2016 Vote Percentage ', showarrow = F, xref='paper', yref='paper'),
list(x = 0.9, y = 0.30, text = '2016 Unemployment Rate', showarrow = F, xref='paper', yref='paper')
),
showlegend = FALSE
)
fig